﻿using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;

namespace Rsdn.Janus
{
    /// <summary>
    /// Сервис, отражающий специфику реализации UI.
    /// </summary>
    public interface IUIShell
    {
        /// <summary>
        /// Создать <see cref="AsyncOperation"/>, привязанную к UI потоку.
        /// </summary>
        /// <returns></returns>
        AsyncOperation CreateUIAsyncOperation();

        /// <summary>
        /// Synchronization context for UI thread.
        /// </summary>
        /// <value>The UI sync context.</value>
        SynchronizationContext UISyncContext { get; }

        /// <summary>
        /// Получить главного родителя окон.
        /// </summary>
        /// <returns></returns>
        IWin32Window GetMainWindowParent();

        /// <summary>
        /// Заморозить UI приложения.
        /// </summary>
        /// <param name="provider">The provider.</param>
        /// <returns></returns>
        IDisposable FreezeUI(IServiceProvider provider);

        /// <summary>
        /// Добавляет контрол/окно для обновления визуальной информации.
        /// </summary>
        /// <param name="control">The control.</param>
        void AddRefreshControl(Control control);

        /// <summary>
        /// Удаляет контрол/окно для обновления визуальной информации.
        /// </summary>
        /// <param name="control">The control.</param>
        void RemoveRefreshControl(Control control);

        /// <summary>
        /// Обновляет данные, связанные с UI.
        /// </summary>
        /// <param name="serviceProvider">The service provider.</param>
        void RefreshData(IServiceProvider serviceProvider);

        /// <summary>
        /// Обновляет заранее устновленный список окон.
        /// </summary>
        void RefreshUI();

        /// <summary>
        /// Получить или установить активный грид контрол.
        /// примечание: Грид контрол наследован от ListView 
        /// </summary>
        /// <value>Активный грид контрол.</value>
        ListView ActiveGrid { get; set; }

        /// <summary>
        /// Получить или установить активный просмотрщик feature
        /// </summary>
        /// <value>Активный просмотрщик feature.</value>
        object ActiveFeatureView { get; set; }

        /// <summary>
        /// Очистить активный список сообщений
        /// </summary>
        void ClearActiveFeatureView();
    }
}